/**
 * 
 */
package neptune.manager.allocator;

import java.util.Map;

import neptune.manager.model.cluster.Cluster;
import neptune.manager.model.topology.Topology;

/**
 * @author Roberto Bifulco [info@robertobifulco.it, robertobifulco.it]
 * 
 */
public interface Allocator {

	public void allocate(String expId, Topology topology, Cluster cluster)
			throws AllocationException;

	/**
	 * Alloca i nodi sul cluster secondo quanto descritto dalla allocation map
	 * passata come argomento. L'allocation map ha come chiavi gli id delle
	 * macchine del cluster e come valori un array di String rappresentante gli
	 * id dei nodi che devono essere allocati sulla macchina fisica il cui id e'
	 * corrispondente alla chiave della map. <br>
	 * <br>
	 * Gli id dei nodi da allocare non sono full id, ma sono gli id come visti
	 * dalla topologia. La topologia cui appartengono e' passata anch'essa come
	 * argomento, assieme al cluster su cui deve essere allocata.<br>
	 * <br>
	 * I valori contenuti nella allocation map sono verificati tramite gli
	 * oggetti topology e cluster passati come argomento.
	 * 
	 * @param allocationMap
	 * @param topology
	 * @param cluster
	 * @throws AllocationException
	 */
	public void allocateWithAllocationMap(Map<String, String[]> allocationMap,
			Topology topology, Cluster cluster) throws AllocationException;

	public void deallocate(String expId, Topology topology, Cluster cluster)
			throws DeallocationException;

	public void terminate(String expId, Topology topology, Cluster cluster)
			throws TerminationException;

	public void isTopologyAllocable(Topology topology, Cluster cluster)
			throws AllocabilityException;
}
